package wodegua.d32_期末考试真题.demo4;

import java.util.*;

/**
 * 第四题(20)
 * 需求
 * 1.红包雨游戏，某企业有100名员工，员工的工号依次是1,2，3,4，.到100。现在公司举办了年会活动，活动中有一个红包雨环节，要求共计发出200个红包雨。
 * 2.其中小红包在[1-30]元之间，总占比为80%，大红包[31-100]元，总占比为20%。
 *
 * 具体的功能点如下
 * 1、系统模拟上述要求产生200个红包。
 * 2、模拟100个员工抢红包雨，需要输出哪个员工抢到哪个红包的过程，活动结束时需要提示活动结束。
 * 3、活动结束后，请1对100名员工按照所抢红包的总金额进行降序排序展示，**例如:3号员工抢红包总计:293元、1号员工抢红包总计250元，…*
 */
public class Test {
    public static void main(String[] args) throws Exception {
        List<Integer> hb = new ArrayList<>();

        int minNumber = 200 * 80 / 100;
        int maxNumber = 200 * 20 / 100;
        Random random = new Random();

        for (int i = 1; i <= minNumber; i++) {
            hb.add(random.nextInt(30) + 1);
        }
        for (int i = 1; i <= maxNumber; i++) {
            hb.add(random.nextInt(70) + 31);
        }
        Collections.shuffle(hb);
        System.out.println("--------------------------------");
        System.out.println("生成的红包");
        System.out.println(hb);

        Map<String, Integer> qhbMap = new HashMap<>();

        Runnable r = new MyRunnable(hb, qhbMap);
        List<Thread> threads = new ArrayList<>();
        for (int i = 1; i <= 200; i++) {
            Thread m = new Thread(r,i + "号");
            m.start();
            threads.add(m);
        }
        for (Thread thread : threads) {
            thread.join();
        }
        System.out.println("活动结束");
        System.out.println("--------------------------------");

        System.out.println("抢到的红包降序排序");
        qhbMap.entrySet().stream().sorted(((o1, o2) -> o2.getValue() - o1.getValue())).forEach(d->{
            System.out.println(d.getKey() + "员工抢红包总计:"+d.getValue()+"元");
        });

    }
}
